package com.assistant.command.impl;

import com.assistant.command.Command;
import com.assistant.core.CommandData;
import com.assistant.system.SystemUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;


/**
 * @author Anyang
 * @version 1.0.0
 * @date 2025/10/25 05:10:02
 * @description 播放音乐指令：使用网易云音乐 URI 协议 (orpheus://)
 */
public class PlayMusicCommand implements Command {
    private static final Logger logger = LoggerFactory.getLogger(PlayMusicCommand.class);
    @Override
    public boolean supports(String action) {
        return "play_music".equals(action.toLowerCase());
    }

    @Override
    public String execute(CommandData data) {
        String songName = data.getTarget();
        String uri;
        String feedback;

        try {
            if (songName.isEmpty()) {
                // --- 【【【 核心修复：恢复窗口检测逻辑 】】】 ---
                // SystemUtil.isAppWindowPresent 现在会自动聚焦窗口

                logger.info("执行指令：播放网易云音乐 (无歌曲名)，使用快捷键策略...");
                feedback = "好的，正在为您播放音乐。";

                // 1. 打开应用
                // SystemUtil.openApplication 会调用 mapAppName("网易云音乐") -> "orpheus://"
                boolean success = SystemUtil.openApplication("网易云音乐");

                if (!success) {
                    return "抱歉，启动网易云音乐失败。";
                }

                // 2. 【恢复】等待并激活窗口
                logger.info("【音乐播放】等待网易云音乐窗口激活...");
                // (5000ms = 5s)
                // isAppWindowPresent 现在会查找并强行激活窗口
                boolean windowFound = SystemUtil.isAppWindowPresent("网易云音乐", 5000);

//                if (windowFound) {
                    logger.info("【音乐播放】窗口已找到并激活，延迟 500ms 后发送 CTRL+P");
                    // 给予窗口 0.5s 彻底响应激活事件
                    Thread.sleep(200);

                    // 3. 发送 CTRL+P
                    SystemUtil.sendCtrlP();
                    return feedback;
//                } else {
//                    logger.warn("【音乐播放】已启动应用，但未能在 5s 内找到并激活窗口。跳过 CTRL+P。");
//                    return "抱歉，启动了网易云音乐，但无法自动播放。";
//                }

            } else {
                // 【保持不变】搜索歌曲的逻辑
                String encodedSongName = URLEncoder.encode(songName, StandardCharsets.UTF_8);
                uri = "orpheus://search/song/?s=" + encodedSongName;
                feedback = String.format("好的，正在网易云音乐中搜索并播放【%s】。", songName);
                logger.info("执行指令：网易云音乐搜索 -> URI: {}", uri);

                boolean success = SystemUtil.openUrl(uri);

                if (success) {
                    return feedback;
                } else {
                    return "抱歉，启动网易云音乐失败。请确保您已安装网易云音乐客户端。";
                }
            }

        } catch (Exception e) {
            logger.error("播放音乐指令执行失败", e);
            Thread.currentThread().interrupt();
            return "抱歉，处理音乐指令时出错了。";
        }
    }
}